/**
 * @file tsk_cmdstore.h
 * @brief tskp库 - 命令存储模块头文件
 * @details
 * 本文件声明了tskp任务调参库的命令存储结构体及相关操作接口。
 * 支持多任务ID与命令的高效绑定、查找、添加、删除等操作，适合嵌入式、实时系统下的指令解析与管理。
 *
 * 作者：小傲（个人开发）
 * 邮箱：2655640770@qq.com
 * 版权声明：开源公开，欢迎建议与反馈
 * 日期：2025-09-11
 */

#ifndef _TSK_CMDSTORE_H_
#define _TSK_CMDSTORE_H_

#include "tsk_misc.h"

#ifdef _TSK_TSKP_

#if TSK_CMD_SWITCH 

// 命令节点结构
typedef struct tsk_cmdNode{
    uint8_t id;                            // 存储的ID
    char cmd[TSK_MAX_STRING_LEN];          // 存储的命令字符串
    struct tsk_cmdNode* next;              // 指向下一个节点的指针
}tsk_cmdNode;

// 哈希表
typedef struct {
    tsk_cmdNode* buckets[TSK_HASH_TABLE_SIZE];      // 哈希桶数组
    uint8_t node_count;                             // 当前节点计数
    tsk_cmdNode nodes[TSK_MAX_TOTAL_NODES];         // 预分配的节点池
}tsk_cmdstore_t;

void tsk_cmdstore_Init(tsk_cmdstore_t* store);
bool tsk_add_cmd(tsk_cmdstore_t* store,uint8_t id,const char * cmd);
bool tsk_del_cmd(tsk_cmdstore_t* store,uint8_t id,const char * cmd);
bool tsk_seek_id_cmd(tsk_cmdstore_t* store,uint8_t id,const char * cmd);
bool tsk_seek_cmd(tsk_cmdstore_t* store,const char * cmd,uint8_t* id);
bool tsk_clear_id_cmd(tsk_cmdstore_t* store,uint8_t id);

#endif // TSK_CMD_SWITCH

#endif // _TSK_TSKP_

#endif // !_TSK_CMDSTORE_H_